#include "ssd1306_i2c.c"

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <softTone.h>
#include <pcf8591.h>
#include <wiringPi.h>
#include <signal.h>
#include <wchar.h>
#include <math.h>

// #include <freetype2/ft2build.h>
// #include <freetype2/freetype/>
// // #include <freetype2/ftglyph.h>
// // #include <freetype2/ftpfr.h>
// // #include <freetype2/ftadvanc.h>
#include <ft2build.h>
#include <freetype/freetype.h>
#include <freetype/ftglyph.h>
#include <freetype/ftpfr.h>
#include <freetype/ftadvanc.h>

#define stopDisplay() ssd1306_clearDisplay();ssd1306_display();

void ctrlc(int i){
    ssd1306_invertDisplay(0);
    stopDisplay()
    printf("指令中断\n");
    exit(1);
}

// inline void DrawNoASCII(int x,int y,FT_Face f1,wchar_t char1){
//     static wchar_t char2=0;
//     if(char2!=char1){
//         char2 =char1;
//     }else{
//         goto DRAWAAA;
//     }
//     // FT_Load_Char(f1,char1,FT_LOAD_RENDER|FT_LOAD_MONOCHROME);
//     FT_UInt glyph_index = FT_Get_Char_Index(f1, char1);
//     FT_Load_Glyph(f1, glyph_index, FT_LOAD_DEFAULT);
//     FT_Render_Glyph(f1->glyph, FT_RENDER_MODE_MONO);
//     DRAWAAA:
//     unsigned char * ptr=f1->glyph->bitmap.buffer;
//     for(int i=0,ii=0;i<8;i++){
//         for(int ii=0;ii<8;ii++){
//             if(ptr[(i)]&256){
//                 putchar('o');
//                 ssd1306_drawPixel(i+x,i+y,WHITE);
//                 ptr[i]<<1;
//             }else {
//                 putchar(' ');
//             }
//         }
//         // putwchar(ptr[i]);
//         // fwrite(ptr,1,1,stdout);
//         ii++;
//         if(ii%8==0){
//             putchar('\n');
//         }
//     }
// }

typedef struct{
    int x,y;
} positions;


int main(){
    // FT_Library lib11;
    // FT_Init_FreeType(&lib11);
    // FT_Face face1;
    // FT_New_Face(lib11,"./new.otf",0,&face1);
    // FT_Select_Charmap(face1,FT_ENCODING_UNICODE);
    // FT_Set_Pixel_Sizes(face1,8,8);
    fopen("./new.otf","r");
    if(wiringPiSetup()==-1){
        return 1;
    }
    pcf8591Setup(200,0x48);
    int x=0,y=0,p=0,speed=2.0,dt=0;
    long int timer1;
    ssd1306_begin(SSD1306_SWITCHCAPVCC,0x3C);
    ssd1306_clearDisplay();
    ssd1306_setTextSize(2);
    int pp=0,count1=0,dianya;
    float V1,R1,temp;
    signal(SIGINT,ctrlc);
    positions p1 = {0,0};
    // positions p2={10,10};
    while(1){
        // timer1=clock();
        ssd1306_clearDisplay();
        // int a=(x+=(analogRead(200)-124)/100)>=0;
        // int b=(y+=(analogRead(201)-124)/100)>=0;
        // x=analogRead(200)-124;
        // y=analogRead(201)-124;
        // if(x<-30 && p1.x>=(speed*dt)){
        //     p1.x-=speed * dt;
        // }else if(x<-100 && p1.x>=(speed*dt*1.5)){
        //     p1.x-=speed*1.5*dt;
        // }else if(x<-30){
        //     p1.x=0;
        // }
        // dianya=analogRead(203);
        // V1=5.0*(double)(dianya)/255.0;
        // R1=1000*((V1)/(5.0-V1));
        // temp=1.0/(((log(R1/1000))/3950)+(1.0/(273.15+25)));
        // temp= temp-273.15;
        // p1.x+=((((x)>100)||(x<-100))?x/abs(x):0)*speed;
        // p1.y+=((((y)>100)||(y<-100))?y/abs(y):0)*speed;
        // if(p1.x<0){
        //     p1.x=0;
        // }else if(p1.x>128){
        //     p1.x=128;
        // }
        // if(p1.y<0){
        //     p1.y=0;
        // }else if(p1.y>64){
        //     p1.y=64;
        // }
        // if(x>30 && p1.x>=(128-speed*dt)){
        //     p1.x+=speed * dt;
        // }else if(x>100 && p1.x>=(128-speed*dt*1.5)){
        //     p1.x+=speed*1.5*dt;
        // }else if(x>30){
        //     p1.x=128;
        // }

        // if(y<-30 && p1.y>=(speed*dt)){
        //     p1.y-=speed * dt;
        // }else if(y<-100 && p1.y>=(speed*dt*1.5)){
        //     p1.y-=speed*1.5*dt;
        // }else if(y<-30){
        //     p1.y=0;
        // }

        // if(y>30 && p1.y>=(64-speed*dt)){
        //     p1.y+=speed * dt;
        // }else if(y>100 && p1.y>=(64-speed*dt*1.5)){
        //     p1.y+=speed*1.5*dt;
        // }else if(y>30){
        //     p1.y=64;
        // }
        // if(!a){
        //     x=0;
        // }
        // if(!b){
        //     y=0;
        // }
        // p=analogRead(202);
        // p=digitalRead(22);
        // DrawNoASCII(10,10,face1,L'中');
        // printf("x:%d,y:%d,press?:%d\n",x,y,p);
        // for(int i=0;i<3;i++){
        //     for (int ii=0;ii<3;ii++){
        //         ssd1306_drawPixel(p1.x+i,p1.y+i,WHITE);
        //         printf("%d,%d ",i,ii);
        //     }
        //     putchar('\n');
        // }
        // ssd1306_fillRect(p1.x,p1.y,16,16,WHITE);
        // time_t t1 =time(NULL);
        // time_t *p11 = (time_t *)malloc(sizeof(time_t));
        // time(p11);
        // char *str1 = ctime(p11);
        // char str1[20];
        // sprintf(str1,"%.2f K",temp);
        // ssd1306_drawText(0,0,str1);
        // printf("%s\n",str1);
        // for(float i=0.0;i<=64.0;i+=1.0){
        //     ssd1306_drawPixel((int)(((0.125)*i*i)+(-8.0*i)+128.0),i,WHITE);
        //     // printf("%f,%f\n",i,(((0.125)*i*i)+(-8.0*i)+128.0));
        // }
        // if(!p){
        //     // (pp)?pp=1:pp=0;
        //     if(pp==1){
        //         count1=count1%2;
        //         ssd1306_invertDisplay(count1);
        //         printf("press\n");
        //         count1++;
        //     }
            
        // }
        ssd1306_display();
        pp=p;
        // dt=(float)((clock()-timer1)/1000)/1000.0;
    }
    // ssd1306_display();
    // delay(1000);
    // stopDisplay();
    // ssd1306_invertDisplay(100);
    // ssd1306_clearDisplay();
    // ssd1306_display();
    // ssd1306_setTextSize(2);
    // ssd1306_drawText(0,0,"abcdefg");
    // // ssd1306_display();
    // delay(2000);
    // stopDisplay();
    // ssd1306_clearDisplay();
    return 0;
}